import { defineStore } from 'pinia'
import { ref } from 'vue'
import { useMapStore } from './map'
import { useTargetStore } from './target'

export const useCarGoStore = defineStore('cargo', () => {
  const cargos = ref([])
  function setupCargos(cargoData) {
    cargos.value = cargoData.map((item, index) => ({
      ...item,
      id: index + 1,
      onTarget: false,
    }))
  }
  // 找到箱子位置
  function findCargo(pos) {
    return cargos.value.find((item) => item.x === pos.x && item.y === pos.y)
  }
  // 移动箱子
  function moveCargo(cargo, x, y) {
    const { isWall } = useMapStore()

    const nextPosition = {
      x: cargo.x + x,
      y: cargo.y + y,
    }
    // 如果下一个位置是墙直接结束

    if (isWall(nextPosition)) return false

    //如果下一个位置是箱子也结束
    if (findCargo(nextPosition)) return false

    cargo.x += x
    cargo.y += y
    detectionTarget(cargo)
    return true
  }

  function detectionTarget(cargo) {
    const { findTarget } = useTargetStore()
    cargo.onTarget = Boolean(findTarget(cargo))
  }

  return {
    cargos,
    setupCargos,
    findCargo,
    moveCargo,
  }
})
